//
//  AppDelegate.swift
//  LeetCodeSwift
//
//  Created by XFB on 2019/7/11.
//  Copyright © 2019 XFB. All rights reserved.
//

import UIKit


enum Direction {
    case north
    case south
    case east
    case west
}

enum Direction1 {
    case north, south, east, west
}


@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }


    /**
     逻辑结构划分方法一
     线性结构：有且仅有一个开始和终端结点，并且所有结点都最多只有一个直接前趋和直接后继 （线性表、栈、队列、串）
     非线性结构：一个结点可能有多个直接前趋和直接后继 （树、图）
     
     逻辑结构划分方法二
     四类基本逻辑结构
     集合结构：结构中的数据元素之间除了 同属于一个集合 的关系外，无任何其他关系
     线性结构：结构中的数据元素之间存在 一对一 的线性关系
     树形结构：结构中的数据元素之间存在 一对多 的层次关系
     图状结构或网状结构：结构中的数据元素之间存在着 多对多 的任意关系
     
     
     存储结构
     顺序存储结构：连续 的存储单元 依次 存储数据元素，数据元素之间的逻辑关系由元素的 存储位置 来表示
     链式存储结构：用一组任意 的存储单元存储数据元素，数据元素之间的逻辑关系用 指针 来表示 （用指针来实现链式存储结构） 主要是存储了下一个元素的地址
     索引存储结构：在存储结点信息的同时，还建立附加的索引表
     散列存储结构：根据结点的关键字直接计算出该节点的存储地址
     
     算法效率
     时间效率：指的是算法所消耗的时间
     空间效率：算法执行过程中所耗费的 存储空间
     时间效率和空间效率有时候是矛盾的
     
     
     
     算法的时间效率的度量：
     事后统计：
        算法实现后，测算器时间和空间开销
        缺点：编写程序实现算法将花费较多的时间和精力。所得实现结果依赖于计算机的软硬件等环境因素，掩盖算法本身的优劣
     事前分析：
        对算法所消耗资源的一种估算方法
     算法运行时间： 每条语句的执行次数 x 该语句执行一次所需的时间
     
     算法时间复杂度
     最坏时间复杂度：指在最坏情况下，算法的时间复杂度
     平均时间复杂度：指在所有可能输入实例在等概率出现的情况下，算法的期望运行时间
     最好的时间复杂度：指在最好情况下，算法的时间复杂度
     
     
     
     常数阶    对数阶         线性阶     线性对数阶    平方阶     立方阶     ...
      O(n)   O(log2^n)      O(n)     O(nlog2^n)   O(n^2)    O(n^3)   ...
     
     */
    
    
    
}

